// 给定单向链表的头指针和一个要删除的节点的值，定义一个函数删除该节点。

// 返回删除后的链表的头节点。

// 注意：此题对比原题有改动

#include<bits/stdc++.h>
using namespace std;

// 遍历

// 执行用时：
// 12 ms
// , 在所有 C++ 提交中击败了
// 56.79%
// 的用户
// 内存消耗：
// 9.2 MB
// , 在所有 C++ 提交中击败了
// 5.37%
// 的用户




  struct ListNode {
      int val;
      ListNode *next;
      ListNode(int x) : val(x), next(NULL) {}
  };
 
class Solution {
public:
    ListNode* deleteNode(ListNode* head, int val) {
        ListNode* cur =head->next;
        ListNode* pre =head;
        // 删除头结点
        if(head->val==val){
            head=head->next;
            return head;
        }
        // 非头结点
        while(true){
            if(cur->val==val){
                pre->next=cur->next;
                break;
            }
            else{
                pre = cur;
                cur=cur->next;
            }
        }
        return head;
    }
};